Modern computing systems such as smartphones, tablets, and other mobile devices enable users to install and run various applications. These mobile applications typically provide a wide range of functionality, such as streaming video, social networking, games, email, instant messaging, weather, navigation, or any other mobile application. An application may be referred to as “native” to a particular computing system when the application program code is executable by a processor of the computing system without requiring translation.
In various runtime environments, it is possible to modify how a method, function, class, or other such software component maps to the actual code implementation of the component. Sometimes referred to as swizzling, such re-mapping technology allows code associated with one function to be replaced by code associated with another function. This may be useful in the context of making modifications to a user interface of an application, for example. Some implementations of re-mapping technology involve modifying the value of a pointer that points to a location in memory where a method is implemented in code. By changing the value of the pointer, the method can be made to point to other code such that, when the method is called, a different method is employed in its place. The target method that is called in place of the original method is sometimes referred to as a callback function. Such techniques may enable a software development kit (SDK) to make modifications to an application without altering the main program code of the application.
Certain runtime environments provide shared-object libraries used by applications, which may be utilized to perform various functions and features. In some instances, an SDK configured to make real-time modifications to an application might require access to the memory addresses of symbols in the shared-object library in order to modify or block certain features that would otherwise complicate or prevent the SDK from making these modifications. However, some operating systems could prevent an application from opening a shared-object library, thereby blocking the application from accessing the memory locations of the symbols in the library.